{\rtf0\ansi{\fonttbl\f0\fmodern Courier;\f1\ftech Symbol;\f2\fmodern Ohlfs;}
\margl40
\margr40
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b0\i0\ulnone\fs24\fc0\cf0 //ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//
\i 	
\b FILENAME
\b0 :	
\b\i0 eText.NeXTHack.m\

\b0 //
\i 	
\b SUMMARY
\b0 :	
\b\i0 Overrides of various private Text methods
\b0 \
//	
\b\i CATEGORY
\b0 :
\i0 	
\b NeXTHack
\b0 , 
\b Mole
\b0 \
//	
\b\i PROTOCOLS
\b0 :
\i0 	
\b None
\b0 \
//	
\b\i INTERFACE
\b0 :
\i0 	
\b None
\b0 \
//	
\b\i AUTHOR
\b0 :		
\b\i0 Rohit Khare
\b0 \
//	
\b\i COPYRIGHT
\b0 :	
\f1\i0 с
\f0\b 1993,94 California Institure of Technology, eText Project\

\b0 //ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//	
\b\i Implementation Comments
\b0\i0 \
//		Boys and girls, can you say private API? I knew you could...\
//	there's more where this came from, but this is what I've verified and\
//	used in lots of different apps.\
//\
//	my favorites: 
\i feedMe:globals:pos:arrayCount:blockCount:
\i0  and 
\i doAbortion
\i0  :)\
//ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//	
\b\i History
\b0\i0 \
//	11/21/94:	
\b Added runForPosition:.
\b0 \
//	10/17/94:	
\b Cleaned up for eText5.
\b0 \
//	08/05/94:	
\b Completely Rearchitected for 5.0. RK
\b0 \
//ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//	
\b Imported Interfaces
\b0 \
//\
	#import "
\b eText.NeXTHack.h
\b0 "\
\
//ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//	
\b Text Stream Hacks	
\b0\i Courtesy of Mike Dixon's XText Package
\i0 \
//\
typedef struct \{\
    
\b id
\b0  				
\b text
\b0 ;\
    
\b NXTextBlock
\b0  	*
\b block
\b0 ;\
\} 
\b textInfo
\b0 ;\
\

\b char
\b0  
\b getPrevious
\b0 (
\b NXStream
\b0  *s) \{\
    
\b textInfo
\b0  *info = (
\b textInfo
\b0  *) 
\b s
\b0 ->
\b info
\b0 ;\
    
\b NXTextBlock
\b0  *
\b block
\b0  = info->block->
\b prior
\b0 ;\
\
    if (
\b !block
\b0 )\
		return 
\b EOF
\b0 ;\
    s->buf_base = block->text;\
    s->buf_ptr = s->buf_base + block->chars;\
    s->offset -= block->chars;\
    info->block = block;\
    return 
\b *(--s->buf_ptr)
\b0 ;\
\}\
\

\i @implementation eText(NeXTHack)\

\i0 //ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//	
\b Proprietary
\b0 \
//\
- 
\b printOneRun
\b0 :a 
\b end
\b0 :b 
\b into
\b0 :c 
\b fonts
\b0 :d 
\b colors
\b0 :e 
\b run
\b0 :(
\b NXRun
\b0  *)f 
\b runPos
\b0 :g 
\b buf
\b0 :h 
\b state
\b0 :i \{\
	if (
\b strictRTF
\b0  && 
\b f->info
\b0 )			// 
\i prevents writing annotations in RTF
\i0 \
		return 
\b self
\b0 ;\
	
\b return
\b0  [
\b super
\b0  printOneRun:a end:b into:c fonts:d colors:e run:f runPos:g buf:h state:i];\
\}                       \
\

\i @end\
\
@implementation eText(Mole)\

\i0 //ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//	
\b Convenience
\b0 \
//\
- (
\b NXRunArray
\b0  *) 
\b theRuns
\b0  \{\
	return 
\b theRuns
\b0 ;\}\
- (
\b NXRun *
\b0 ) 
\b runForPosition
\b0 :(int) pos \{\
	int 	i=0,k,N;\
	
\b NXRun
\b0  	*
\b curr
\b0 ;\
	\
	
\b N
\b0  = theRuns->chunk.
\b used
\b0 /sizeof(
\b NXRun
\b0 );\
	
\b curr
\b0  = theRuns->
\b runs
\b0 ;\
	for (k=0; k < N; k++) \{\
		
\b i
\b0  += curr->
\b chars
\b0 ;\
		if (i >= pos) return 
\b curr
\b0 ;\
		curr++;\
	\}\
	return 
\b NULL
\b0 ;\
\}\
\
//ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//	
\b Delegation
\b0 \
//\
- 
\b textDidGetKeys
\b0 :sender 
\b isEmpty
\b0 :(
\b BOOL
\b0 )flag \{\
	[etDoc 
\b touch
\b0 ]; return self;\}\
- 
\b textWillConvert
\b0 :sender 
\b fromFont
\b0 :from 
\b toFont
\b0 :to \{\
	[etDoc 
\b touch
\b0 ]; return 
\b to
\b0 ;\}\
- 
\b textDidRead
\b0 :sender 
\b paperSize
\b0 :(
\b NXSize
\b0  *)paperSize \{\
	NXRect bnd,frm;\
	\
	[self getBounds:&bnd];\
	[[self window] getFrame:&frm];\
	frm.size.width += paperSize->width - bnd.size.width;\
	frm.size.height += paperSize->height - bnd.size.height;\
	frm.origin.y -= paperSize->height - bnd.size.height;\
	[[self window] placeWindow:&frm];\
	return self;\
\}\
\

\i @end
}
